/**
 * \file FCorrespondance.h
 * \author Florian LANCE - Armand POLI
 * \version 1.0
 * \date octobre 2011
 */

#ifndef _FCORR
#define _FCORR

#include <iostream>
#include <vector>


/**
* @class Classe Fcorr, fonction de correspondance qui initialiser un tabelau de correspondance, celui-ci va servir à modifier les images en remplaçant les
*        valeurs du pixel par celles correpondant a celui-ci.
*/
class Fcorr
{
    public:

        /** @brief Constructeur par défaut de FFT. */
        Fcorr();
        /** @brief Constructeur de FFT prenant la valeur maximale(taille du tableau de correspondance) en paramètre. */
        Fcorr(const unsigned int);
        ~Fcorr();

        /** @brief Retourne la ième valeur du tableau de correspondance. */
        unsigned int getVal(const unsigned int i) const;

        /** @brief Initialise le tableau de correspondance pour effectuer une translation sur la valeur des pixels. */
        void InitTranslation(const int valeur);
        /** @brief Initialise le tableau de correspondance pour effectuer inversion sur la valeur des pixels. */
        void InitInversion();
        /** @brief Initialise le tableau de correspondance pour effectuer une égalisation sur la valeur des pixels à partir d'un histogramme cumulé et du nb de pixels. */
        void InitEgalisation(const std::vector<unsigned int>& histC, const unsigned int nbPixel);
        /** @brief Initialise le tableau de correspondance pour effectuer une spécification sur la valeur des pixels à partir de 2 histogrammes cumulés. */
        void InitSpecification(const std::vector<unsigned int>& histC1,const std::vector<unsigned int>& histC2);
        /** @brief Version optimisée de la spécification pour la spécification glissante. */
        unsigned int retourneValSpecificationGlisssante(const std::vector<unsigned int>&, const std::vector<unsigned int>&, const unsigned int);


    private:

        unsigned int valMax;                            /**< Taille du tableau de correspondance. */
        std::vector<unsigned int> tabCorrespondance;    /**< Tableau d'entiers positifs contenant les valeurs de correspondance. */

};


#endif
